package com.softeem.fx1;

import java.util.ArrayList;
// <? extends B> 允许元素本身的存储以及其子类的存储
// <? super B> 允许元素本身的存储以及其父类的存储
class A{
    private int i;

    public A() {
    }

    public A(int i) {
        this.i = i;
    }

    public int getI() {
        return i;
    }

    public void setI(int i) {
        this.i = i;
    }

    @Override
    public String toString() {
        return "A{" +
                "i=" + i +
                '}';
    }
}

class B extends A{
    private int j;

    public B() {
    }

    public B(int j) {
        this.j = j;
    }

    public B(int i, int j) {
        super(i);
        this.j = j;
    }

    public int getJ() {
        return j;
    }

    public void setJ(int j) {
        this.j = j;
    }

    @Override
    public String toString() {
        return "B{" +
                "j=" + j +
                '}';
    }
}

class C extends B{
    private int k;

    public C() {
    }

    public C(int k) {
        this.k = k;
    }

    public int getK() {
        return k;
    }

    public void setK(int k) {
        this.k = k;
    }

    @Override
    public String toString() {
        return "C{" +
                "k=" + k +
                '}';
    }
}

public class Demo_03 {

    public static void main(String[] args) {
        ArrayList<A> listA = new ArrayList<A>();//存储A对象以及其子类对象
        listA.add(new A(1));
        listA.add(new B(11));
        listA.add(new C(111));
        System.out.println(listA);
        System.out.println("----------------------");
        ArrayList<B> listB = new ArrayList<B>();//存储B对象
        //listB.add(new A(2));
        listB.add(new B(22));
        listB.add(new C(222));
        System.out.println(listB);
        System.out.println("----------------------");
        ArrayList<C> listC = new ArrayList<C>();//存储C对象
        //listC.add(new A(3));
        //listC.add(new B(33));
        listC.add(new C(333));
        System.out.println(listC);
        System.out.println("----------------------");

        //ArrayList<Object> obj = new ArrayList<Object>();
        //ArrayList list = new ArrayList();


        //可以存储当前的B类对象集合,也可以存储其子类对象的集合
        ArrayList<? extends B> list1 = listC;
        ArrayList<? extends B> list2 = listB;


        //可以存储当前的B类的对象集合,也可以存储其父类的对象集合
        ArrayList<? super B> list3 = listA;
        ArrayList<? super B> list4 = listB;



    }
}
